class Factura < ActiveRecord::Base
  has_many :detalle_facturas
  belongs_to  :mayorista
  belongs_to  :centro
  
  before_save :actualiza_info_detalle
  after_update :guardar_detalles
  
  validates_presence_of  :mayorista_id, :centro_id, :fecha_factura,
    :referencia, :user_id
  validates_uniqueness_of :referencia, :scope => [:mayorista_id]
  validate :valida_fecha_vigente
  #  validates_associated   :detalle_facturas

  def detalle_attributes=(detalle_attributes)
    detalle_attributes.each do |attributes|
      if attributes[:id].blank?
        detalle_facturas.build(attributes) 
      else
        detalle = detalle_facturas.detect {|d| d.id == attributes[:id].to_i}
        detalle.attributes = attributes
        
      end
      
    end

  end
  
  def valida_fecha_vigente
    errors.add_to_base('La fecha de la factura no es correcta') unless !fecha_factura.nil? && fecha_factura <= Time.now
  end

  def actualiza_info_detalle
    detalle_facturas.each do |d|
      producto = Producto.find(d.producto_id)
      d.precio_venta = producto.precio_venta
      d.precio_publico = producto.precio_publico
      d.costo_cuervo = producto.costo_cuervo
      d.ieps = producto.ieps
      d.producto_id = producto.id
      d.cajas_9lt = (d.unidades * producto.presentacion_id)/9000.0
      
    end
    self.ejecutivo_id = self.centro.ejecutivo_id
  end
  
  def guardar_detalles
    detalle_facturas.each do |d|
      if d.should_destroy?
        d.destroy
      else
        d.save(false)
      end
    end
  end
end
